#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 100

typedef char datatype;


typedef struct {
    datatype data[MAXSIZE];
    int front, rear;
    int num;
} SeqQueue;

// 初始化队列
SeqQueue *init_queue()
{
    SeqQueue *q;
    q = (SeqQueue *)malloc(sizeof(SeqQueue));
    q->front = q->rear = 0;
    q->num = 0;
    return q;
}

// 入队操作
int push(SeqQueue *q, datatype e)
{
    if (q->num == MAXSIZE)
    {
        printf("队列已经满！\n");
        return -1;
    }
    q->data[q->rear] = e;
    q->rear = (q->rear + 1) % MAXSIZE;
    q->num++;
    return 1;
}

// 出队操作
int pop(SeqQueue *q, datatype *e)
{
    if (q->num == 0)
    {
        printf("队列为空，不能出队！\n");
        return 0;
    }
    *e = q->data[q->front];
    q->front = (q->front + 1) % MAXSIZE;
    q->num--;
    return 1;
}

// 判断队列是否为空
int empty_queue(SeqQueue *q)
{
    return q->num == 0;
}

// 测试主函数
int main()
{
    SeqQueue *q;
    q = init_queue();
    push(q, 'a');
    push(q, 'b');
    push(q, 'c');
    push(q, 'd');
    push(q, 'e');
    push(q, 'f');
    push(q, 'g');
    push(q, 'h');
    push(q, 'i');
    push(q, 'j');
    push(q, 'k');
    push(q, 'l');
    push(q, 'm');
    push(q, 'n');
    push(q, 'o');
    push(q, 'p');
    push(q, 'q');
    push(q, 'r');
    push(q, 's');
    push(q, 't');
    push(q, 'u');
    push(q, 'v');
    push(q, 'w');
    push(q, 'x');
    push(q, 'y');
    push(q, 'z');
    datatype e;
    while (!empty_queue(q))
    {
        pop(q, &e);
        printf("%c ", e);
    }
    printf("\n");
    system("pause");
    return 0;
}